# fonctions pour opérations sur les nombres rationnels
# un nombre rationnel est codé dans une liste de deux éléments:
# le rationnels x tel que 
# x[0] est le numérateur et x[1] est le dénominateur
# -*- coding:utf-8 -*-
import sys

def pgcd(a,b): 
    while b>0: 
        a, b = b, a % b 
    return a  

def ppcm(a,b):             
    return a*b // pgcd(a,b) 
                           

def reduitF(a):                                    
    if a[1] == 0:
        print("erreur le dÃ©nominateur est nul !")  
                                                   
                                                    
        sys.exit()                                 
    else :
        d = pgcd(a[0],a[1]) 
        if a[0] !=0:       
            sign = (a[0]*a[1]) // abs(a[0]*a[1])    
        else :
            sign = 1        
        return [sign * abs(a[0]//d), abs(a[1]//d)]  
                                                   

def afficheF(a):
    print(a[0],"/",a[1])    

def sommeF(a,b):                    
                                  
    f1, f2 = reduitF(a), reduitF(b)
    d_com = ppcm(f1[1],f2[1])      
                                   
                                   
    f1[0] = f1[0] * d_com // f1[1] 
                                  
    f2[0] = f2[0] * d_com // f2[1] 
    return [f1[0]+f2[0],d_com]      


def produitF(a,b):
    return reduitF([a[0]*b[0],a[1]*b[1]])  

def dtoFp(a): 
    decimS = str(a).split(".")              
                                           
    taille_decim = len(decimS[1])           
    decim = int(decimS[1])                
    entier = int(a)                      
    print(decim,entier,10**taille_decim-1)  
    return sommeF([entier,1],[decim,10**taille_decim-1])
    
def dtoF(a,n=15):                          
    return reduitF([int(a*10**n),10**n])   


    
    
